package pe.gob.sunat.proyecto.service.impl;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.gob.sunat.proyecto.dao.UsuarioDao;
import pe.gob.sunat.proyecto.exception.LoginException;
import pe.gob.sunat.proyecto.model.Usuario;
import pe.gob.sunat.proyecto.service.UsuarioService;

@Service
@Transactional
public class UsuarioServiceImpl implements UsuarioService {
	private static final Logger logger = Logger
			.getLogger(UsuarioServiceImpl.class);

	@Autowired
	private UsuarioDao usuarioDao;

	@Transactional
	@Override
	public Usuario login(String username, String password) {
		logger.debug("Inicio login");
		Usuario usuario = usuarioDao.getUsuarioPorUsername(username);
		if (usuario == null) {
			throw new LoginException("El usuario no existe");
		}
		if (!password.equals(usuario.getPassword())) {
			throw new LoginException("El usuario y el password no son validos");
		}
		return usuario;
	}

	public void setUsuarioDao(UsuarioDao usuarioDao) {
		this.usuarioDao = usuarioDao;
	}

	@Override
	public void delete(String username) {
		usuarioDao.delete(username);
	}

	@Override
	public Usuario getUsuarioPorUsername(String username) {
		return usuarioDao.getUsuarioPorUsername(username);
	}

	@Secured("ROLE_ADMIN")
	@Override
	public List<Usuario> getUsuarios() {
		return usuarioDao.getUsuarios();
	}

	@Override
	public List<Usuario> getUsuariosPorNombre(String nombre) {
		return usuarioDao.getUsuariosPorNombre(nombre);
	}

	@Override
	public void insert(Usuario usuario) {
		usuarioDao.insert(usuario);

	}

	@Override
	public void update(Usuario usuario) {
		usuarioDao.update(usuario);
	}

}
